]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
GActionMuxer: disconnect group signals on finalize
authorRyan Lortie <desrt@desrt.ca>
Fri, 29 Jun 2012 03:55:33 +0000 (23:55 -0400)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 4 Oct 2012 10:03:23 +0000 (12:03 +0200)
The signals for the action group were being disconnected when the action
group was explicitly removed from the GActionMuxer but the same was not
being done when it was finalized.

This means that a change in the state of an action group that used to be
associated with a finalized GActionMuxer would result in a crash.  This
would happen for stateful application actions after closing a window.

https://bugzilla.gnome.org/show_bug.cgi?id=681399

src/gactionmuxer.c

index d8383064d290b96b24ef4143cec41b26394ee001..780fbdd1157b5893e00018641a3beb5fcb816be7 100644 (file)
@@ -392,6 +392,11 @@ static void
 g_action_muxer_free_group (gpointer data)
 {
   Group *group = data;
+  gint i;
+
+  /* 'for loop' or 'four loop'? */
+  for (i = 0; i < 4; i++)
+    g_signal_handler_disconnect (group->group, group->handler_ids[i]);
 
   g_object_unref (group->group);
   g_free (group->prefix);
@@ -525,10 +530,6 @@ g_action_muxer_remove (GActionMuxer *muxer,
         g_action_muxer_action_removed (group->group, actions[i], group);
       g_strfreev (actions);
 
-      /* 'for loop' or 'four loop'? */
-      for (i = 0; i < 4; i++)
-        g_signal_handler_disconnect (group->group, group->handler_ids[i]);
-
       g_action_muxer_free_group (group);
     }
 }